Example : Color Swatches With a Pattern File
Logic
Update the color swatches with a pattern file:
JS Code:
/* get all products to loop on */
function getProductElements(element) {
return [...element.querySelectorAll(`.fs-results-product-card`)];
}
function hooks() {
let assetUrl = "https://cdn.shopify.com/s/files/1/0642/9497/7770/files/";
window.SerpOptions.registerHook("serp-filters", ({filters, element}) => {
if(typeof element !== 'undefined' && element.querySelectorAll('.swatches').length > 0){
// color swatches images
var allColorSwatches = element.querySelectorAll(".color-swatch-container.fs-color-swatch-container");
if (allColorSwatches.length > 0){
allColorSwatches.forEach(function (swatchContainer) {
let colorName = swatchContainer.querySelector('.color-swatch-color-name').innerHTML.toLowerCase();
let swatch = swatchContainer.querySelector('.color-swatch');
swatch.style.backgroundColor = colorName;
colorName = colorName.replaceAll('/', '-')+'_50x50.png';
colorName = colorName.replaceAll(' ', '-');
colorName = colorName.replaceAll('color_', '');
colorName = assetUrl + colorName;
if(swatch.style.backgroundColor === '' || swatch.style.backgroundColor !== swatchContainer.querySelector('.color-swatch-color-name').innerHTML.toLowerCase())
{
swatch.style.backgroundImage = "url("+colorName+")";
}
});
}
}
});
window.SerpOptions.registerHook("serp-product-grid", ({products, element}) => {
for (const productElement of getProductElements(element)) {
const productID = productElement.dataset.productId;
const data = products[productID];
// color swatches images
var allColorSwatches = productElement.querySelectorAll(".color-swatch-container");
if (allColorSwatches.length > 0)
{
allColorSwatches.forEach(function (swatchContainer)
{
let colorName = swatchContainer.querySelector('.color-swatch-color-name').innerHTML.toLowerCase();
let swatch = swatchContainer.querySelector('.color-swatch');
swatch.style.backgroundColor = colorName;
colorName = colorName.replaceAll('/', '-')+'_50x50.png';
colorName = colorName.replaceAll(' ', '-');
colorName = colorName.replaceAll('color_', '');
colorName = assetUrl + colorName;
if(swatch.style.backgroundColor === '' || swatch.style.backgroundColor !== swatchContainer.querySelector('.color-swatch-color-name').innerHTML.toLowerCase())
{
swatch.style.backgroundImage = "url("+colorName+")";
}
});
}
}
});
}
if (window.SerpOptions) {
hooks();
} else {
window.addEventListener('fast-serp-ready', function () {
hooks();
});
}